package model.bo;

import model.entidade.Empregado;
import java.math.BigDecimal;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

public class EmpregadoBOTestCpf {
    
    public EmpregadoBOTestCpf() {
    }

    @BeforeClass
    public static void setUpClass() throws Exception {
        
        try {
            Empregado empregado = new Empregado(1l, "QualquerNome", true, new BigDecimal(500.00), "14134800714", "01/02/91", "01/01/2010", "");
            EmpregadoBO.getInstance().incluir(empregado);
        } catch (Exception ex) {
            fail("Falha na inclusão de um empregado");
        }
        
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
    }
    
    @Before
    public void setUp() {
    }
    
    @After
    public void tearDown() {
    }
    
    /**
     * Testes do método que verifica se o CPF inserido é um CPF válido.
     * 
     * @author Zeno
     * 
     */
    
    @Test(expected = EmpregadoException.class) 
    public void testCpfMenosDigitos() throws EmpregadoException {
        String cpf = "0000000000";
        cpfInvalido(cpf);
    }
    
    @Test(expected = EmpregadoException.class) 
    public void testCpfMaisDigitos() throws EmpregadoException {
        String cpf = "000000000000";
        cpfInvalido(cpf);
    }
    
    @Test(expected = EmpregadoException.class) 
    public void testCpfFormatoInvalido() throws EmpregadoException {
        String cpf = "000.000.000-00";
        cpfInvalido(cpf);
    }
    
    @Test(expected = EmpregadoException.class) 
    public void testCpfInexistente() throws EmpregadoException {
        String cpf = "12345678911";
        cpfInvalido(cpf);
    }
    
    @Test
    public void testCpfExistente() throws EmpregadoException {
        String cpf = "14134800714";
        cpfValido(cpf);
    }
    
    private void cpfValido(String cpf) throws EmpregadoException {
    	EmpregadoValidationHelper empregadoValidationHelper = new EmpregadoValidationHelper();
        boolean valido =empregadoValidationHelper.validaCpf(cpf);
        assertEquals(true, valido);
    }
    
    private void cpfInvalido(String cpf) throws EmpregadoException {
    	EmpregadoValidationHelper empregadoValidationHelper = new EmpregadoValidationHelper();
        boolean invalido = empregadoValidationHelper.validaCpf(cpf);
    }
    
    /**
     * Testes do método que evita que existam dois empregados com o mesmo CPF
     * 
     * @author Zeno
     * 
     */
    
    @Test(expected = EmpregadoException.class) 
    public void testCpfIgual() throws EmpregadoException, Exception {
        String cpf = "14134800714";
        cpfIgual(cpf);
    }
    
    @Test
    public void testCpfDiferente() throws EmpregadoException, Exception {
        String cpf = "24134800714";
        cpfDiferente(cpf);
    }
    
    private void cpfIgual(String cpf) throws EmpregadoException, Exception {
        boolean valido = EmpregadoBO.getInstance().validaNaoExistenciaDeCpf(cpf);
        assertEquals(true, valido);
    }
    
    private void cpfDiferente(String cpf) throws EmpregadoException {
        boolean invalido = EmpregadoBO.getInstance().validaNaoExistenciaDeCpf(cpf);
    }
    
}
